home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 2888 / 2888.xpi / content / gmarks.js < prev    next >
Text File  |  2009-06-11  |  27KB  |  701 lines

  1. var GMS;
  2.  
  3. var GM={
  4.   lastKeyPress: 0,
  5.   star: null,
  6.   getURL: function(){
  7.     return document.popupNode.getAttribute('value');
  8.   },
  9.   addRemove: function(event){
  10.     if (event.button==1){
  11.       if (!this.removeGMark()){
  12.         this.addGMark();
  13.       }
  14.     }
  15.   },
  16.   removeGMark: function(){
  17.     var index;
  18.     if ((index=GMS.isBookmarked(window.content.location.href))){
  19.       GMS.onRemoveBookmark(index, true, false);
  20.       this.star.className="star-off";
  21.       return true;
  22.     }
  23.     return false;
  24.   },
  25.   quickAddGMark: function(title, url, label){
  26.     var theUrl = url ? url : window.content.location.href;
  27.     var docTitle = title ? title : window.content.document.title;
  28.     var labels = label ? [label] : new Array();
  29.     var notes=window.content.getSelection().toString();
  30.     //createNewBookmark: function(aId, aURL, aTitle, aLabels, aNotes, aDate, aImage,
  31.     var bkmk=GMS.createNewBookmark(null, theUrl, docTitle, labels, notes);
  32.     this.star.className="star-on";
  33.     GMS.updateBookmark(bkmk,true);
  34.     GMS.sendUpdateBookmark(bkmk);
  35.   },
  36.   addGMark : function(title, url,label){
  37.     var theUrl = url ? url : window.content.location.href;
  38.     var docTitle = title ? title : window.content.document.title;
  39.     var labels = label ? [label] : new Array();
  40.     var notes=""//document.getSelection();
  41.     var prefs = Components.classes["@mozilla.org/preferences-service;1"].
  42.       getService(Components.interfaces.nsIPrefService).getBranch("gmarks");
  43.     var appInfo = Components.classes["@mozilla.org/xre/app-info;1"]
  44.                         .getService(Components.interfaces.nsIXULAppInfo);
  45.     var versionChecker = Components.classes["@mozilla.org/xpcom/version-comparator;1"]
  46.                                    .getService(Components.interfaces.nsIVersionComparator);
  47.     var FF3 = (versionChecker.compare(appInfo.version, "3.0a") >= 0);
  48.     if (prefs.getBoolPref('.ctrlD')==true && !FF3){
  49.       var arg=new addGMarkArgs(docTitle,theUrl,labels,notes,1);
  50.       window.openDialog("chrome://browser/content/bookmarks/addBookmark2.xul","","chrome,centerscreen,modal",arg);
  51.     }
  52.     else{
  53.       this.editOK=false;
  54.       window.openDialog("chrome://gmarks/content/editBookmark.xul","","chrome,centerscreen,modal",docTitle, theUrl,labels,notes,0,null,true);
  55.       //if (this.editOK){
  56.       //  GMS.updateBookmark(this.editBookmark,true);
  57.       //  GMS.sendUpdateBookmark(this.editBookmark);
  58.       //}
  59.     }
  60.   },
  61.   _getTabInfo: function(){
  62.     var tabList = [];
  63.     var seenURIs = [];
  64.     var browsers = getBrowser().browsers;
  65.     for (var i = 0; i < browsers.length; ++i) {
  66.       var webNav = browsers[i].webNavigation;
  67.       var uri = webNav.currentURI;
  68.       // skip redundant entries
  69.       if (uri.spec in seenURIs)
  70.         continue;
  71.       // add to the set of seen URIs
  72.       seenURIs[uri.spec] = true;
  73.       tabList.push(uri);
  74.     }
  75.     return tabList;
  76.   },
  77.   addGMarks : function(title, url,label){
  78.     var info = {
  79.       action: "add",
  80.       type: "folder",
  81.       hiddenRows: ["description"],
  82.       URIList: GM._getTabInfo()
  83.     };
  84.     PlacesUIUtils._showBookmarkDialog(info, true);
  85.     return;  
  86.     var theUrl = url ? url : window.content.location.href;
  87.     var docTitle = title ? title : window.content.document.title;
  88.     var labels = label ? [label] : new Array();
  89.     var notes=""//document.getSelection();
  90.     var prefs = Components.classes["@mozilla.org/preferences-service;1"].
  91.       getService(Components.interfaces.nsIPrefService).getBranch("gmarks");
  92.     var appInfo = Components.classes["@mozilla.org/xre/app-info;1"]
  93.                         .getService(Components.interfaces.nsIXULAppInfo);
  94.     var versionChecker = Components.classes["@mozilla.org/xpcom/version-comparator;1"]
  95.                                    .getService(Components.interfaces.nsIVersionComparator);
  96.     var FF = (versionChecker.compare(appInfo.version, "3.0a") >= 0);
  97.     if (prefs.getBoolPref('.ctrlD')==true && !FF3){
  98.       var arg=new addGMarkArgs(docTitle,theUrl,labels,notes,1);
  99.       window.openDialog("chrome://browser/content/bookmarks/addBookmark2.xul","","chrome,centerscreen,modal",arg);
  100.     }
  101.     else{
  102.       this.editOK=false;
  103.       window.openDialog("chrome://gmarks/content/editBookmark.xul","","chrome,centerscreen,modal",docTitle, theUrl,labels,notes,0,null,true);
  104.     }
  105.   },
  106.   onEditBookmark : function(bm) {
  107.     bm=GMS.getBookmark(bm);
  108.     this.editBookmark=bm;
  109.     this.editOK=false;
  110.     this.delBkmk=null;
  111.     window.openDialog("chrome://gmarks/content/editBookmark.xul","","chrome,centerscreen,modal",bm.title, bm.url,bm.labels,bm.notes,bm.id,bm.mode,false);
  112.  
  113.   },
  114.   onPageChange : function(event){
  115.     if (window.content && window.content.location){
  116.       var url=window.content.location.href;
  117.       var index=GMS.isBookmarked(url);
  118.       if (!GM.star || GM.star == null) GM.star=document.getElementById("GM-star");
  119.       if (index && GM.star && GM.star != null){
  120.         GM.star.className="star-on";
  121.       }
  122.       else if (GM.star){
  123.         GM.star.className="star-off";
  124.       }
  125.     }
  126.   },
  127.   updateURL : function(url){
  128.     bm=GMS.getBookmark(url);
  129.     var newURL=window.content.location.href;
  130.     GMS.onRemoveBookmark(bm,false);
  131.     bm.url=newURL;
  132.     GMS.updateBookmark(bm,true);
  133.     GMS.sendUpdateBookmark(bm);
  134.   },
  135.   organizeGMarks: function(){
  136.     window.open('chrome://gmarks/content/gmarksOrganize.xul','','chrome,resizable');
  137.   },
  138.   openOptions: function(){
  139.     window.openDialog('chrome://gmarks/content/options.xul','','chrome,titlebar,toolbar,centerscreen,resizable');
  140.   },
  141.   manageOnline: function(){
  142.     //dump("Mange Online\n");
  143.     //dump("URL: "+GMS.manageOnlineURL+"\n");
  144.     openUILinkIn(GMS.manageOnlineURL,"tab");
  145.   },
  146.   editFilters: function(){
  147.     window.open("chrome://gmarks/content/editFilters.xul","","chrome,centerscreen,resizable");
  148.   },
  149.   signIn: function(){
  150.     //dump("signin\n");
  151.     var prefs = Components.classes["@mozilla.org/preferences-service;1"].
  152.       getService(Components.interfaces.nsIPrefService).getBranch("gmarks.");
  153.     var pass = GMS.getPassInfo();
  154.     var username = {value: pass.user?pass.user:null};              // default the username to user
  155.     var password = {value: pass.password?pass.password:null};              // default the password to pass
  156.     var check = {value: prefs.getBoolPref("signin")};                   // default the checkbox to true
  157.     var checktext = GMS.strbundle.GetStringFromName("autosignin");
  158.     var title = GMS.strbundle.GetStringFromName("signintitle");
  159.     var text = GMS.strbundle.GetStringFromName("enteruserandpass");
  160.     var prompts = Components.classes["@mozilla.org/embedcomp/prompt-service;1"]
  161.                         .getService(Components.interfaces.nsIPromptService);
  162.     var result = prompts.promptUsernameAndPassword(null, title, text,
  163.                                                    username, password, checktext, check);
  164.     //dump("result: "+result+"|"+username.value+"|"+password.value+"|"+check.value+"\n");
  165.     if (result){
  166.       prefs.setBoolPref("signin",check.value);
  167.       if (check.value){
  168.         GMS.savePassInfo(username.value,password.value);
  169.       }
  170.       var sidebar = document.getElementById("sidebar");
  171.       if (sidebar){
  172.         try{
  173.           sidebar.contentDocument.getElementById("signedOffContainer").setAttribute("hidden","true");
  174.         }catch(e){
  175.  
  176.         }
  177.       }
  178.  
  179.       GMS.onSignIn(false,username.value,password.value);
  180.     }
  181.   },
  182.   observer: {
  183.     observe: function(subject, topic, data) {
  184.       try{
  185.         if (topic=="star-change"){
  186.           this.star=document.getElementById("GM-star");
  187.           if (data=="on"){
  188.             this.star.className="star-on";
  189.           } else {
  190.             this.star.className="star-off";
  191.           }
  192.         }
  193.         else if (topic=="gmarks-onload"){
  194.           insertInToolbar();
  195.           initGMarksMenu()
  196.         }
  197.         else if (topic="gmarks-quickrefresh" || topic=="gmarks-onrefresh" || topic=="gmarks-refreshttoolbar"){
  198.           insertInToolbar(data);
  199.           initGMarksMenu()
  200.         }
  201.         else if (topic=="gmarks-updateToolbarImage"){
  202.           var pos=data.indexOf("\n");
  203.           var id=data.substring(0,pos);
  204.           var img=data.substring(pos+2);
  205.           document.getElementById("gmBkmk_"+id).setAttribute("image",img);
  206.         }
  207.         else if (topic=="gmarks-url-added"){
  208.           //dump("urladded: "+data+"\n");
  209.           if (data==window.content.location){
  210.             this.star=document.getElementById("GM-star");
  211.             this.star.className="star-on";
  212.           }
  213.         }
  214.         else if (topic=="gmarks-url-removed"){
  215.          //dump("urlremoved: "+data+"\n");
  216.          if (data==window.content.location){
  217.             this.star=document.getElementById("GM-star");
  218.             this.star.className="star-off";
  219.          }
  220.         }
  221.       }
  222.       catch(e){}
  223.     },
  224.     register: function() {
  225.       var observerService = Components.classes["@mozilla.org/observer-service;1"]
  226.                           .getService(Components.interfaces.nsIObserverService);
  227.       observerService.addObserver(this, "star-change", false);
  228.       observerService.addObserver(this, "gmarks-onrefresh", false);
  229.       observerService.addObserver(this, "gmarks-quickrefresh", false);
  230.       observerService.addObserver(this, "gmarks-refreshtoolbar", false);
  231.       observerService.addObserver(this, "gmarks-onload", false);
  232.       observerService.addObserver(this, "gmarks-updateToolbarImage", false);
  233.       observerService.addObserver(this, "gmarks-url-added", false);
  234.       observerService.addObserver(this, "gmarks-url-removed", false);
  235.     },
  236.     unregister: function() {
  237.       var observerService = Components.classes["@mozilla.org/observer-service;1"]
  238.                             .getService(Components.interfaces.nsIObserverService);
  239.       observerService.removeObserver(this, "star-change");
  240.       observerService.removeObserver(this, "gmarks-onrefresh");
  241.       observerService.removeObserver(this, "gmarks-quickrefresh");
  242.       observerService.removeObserver(this, "gmarks-onload");
  243.       observerService.removeObserver(this, "gmarks-refreshtoolbar");
  244.       observerService.removeObserver(this, "gmarks-updateToolbarImage");
  245.       observerService.removeObserver(this, "gmarks-url-added");
  246.       observerService.removeObserver(this, "gmarks-url-removed");
  247.     }
  248.   },
  249.   doSearch: function(event){
  250.     var d=new Date();
  251.     var time=d.valueOf();//*1000+d.getMilliseconds();
  252.     if (time-GM.lastKeyPress< 700 && time-GM.lastKeyPress>5){
  253.       for (var p in event){
  254.         if (p.toString().substring(0,7)=="DOM_VK_" && event[p]==event.keyCode){
  255.           GMS.qsKey=p.toString().substring(7,8)+p.toString().substring(8).toLowerCase();
  256.           break;
  257.         }
  258.       }
  259.       window.openDialog("chrome://gmarks/content/quicksearch.xul","","chrome,hidechrome,titlebar=no,top="+((screen.height/2)-200)+
  260.         ",left="+(screen.width/2-200));
  261.     }
  262.     else
  263.       GM.lastKeyPress=time;
  264.   },
  265.   handleKeyUp: function(event){
  266.     if (GMS.qsKeyCode>0 && GMS.qsKeyCode==event.keyCode && event.keyCode>0){
  267.       GM.doSearch(event);
  268.     }
  269.     else
  270.       GM.lastKeyPress=0;
  271.   },
  272.   starMouseMove: function(isIn){
  273.     if (GM.star){
  274.       if (GM.star.className=='star-on'){
  275.         GM.star.className='star-off';
  276.       }
  277.       else{
  278.         GM.star.className='star-on';
  279.       }
  280.     }
  281.   }
  282. }
  283.  
  284. function GMarks_isFF3(){
  285.   var appInfo = Components.classes["@mozilla.org/xre/app-info;1"]
  286.                       .getService(Components.interfaces.nsIXULAppInfo);
  287.   var versionChecker = Components.classes["@mozilla.org/xpcom/version-comparator;1"]
  288.                                  .getService(Components.interfaces.nsIVersionComparator);
  289.   var FF3 = (versionChecker.compare(appInfo.version, "3.0a") >= 0);
  290.   return FF3;
  291. }
  292. function doGMarksLoad(event){
  293.   GMS=Components.classes["@mozilla.org/gmarks;1"]
  294.           .getService(Components.interfaces.nsIGMarksService).wrappedJSObject;
  295.   GM.star=document.getElementById("GM-star");
  296.   var prefs = Components.classes["@mozilla.org/preferences-service;1"].
  297.       getService(Components.interfaces.nsIPrefService).getBranch("gmarks");
  298.   
  299.   initGMarksMenu();
  300.   prefs = Components.classes["@mozilla.org/preferences-service;1"].
  301.                getService(Components.interfaces.nsIPrefService).getBranch("gmarks.");
  302.   var key_open=document.getElementById("key_GMOpenSidebar");//
  303.   if (key_open==null){
  304.      var keys=document.getElementsByTagName("key");
  305.      for (var i=0;i<keys.length;i++){
  306.        var k=keys[i].getAttribute('id');
  307.        if (k=="key_GMOpenSidebarr"){
  308.          key_open=keys[i];
  309.          break;
  310.        }
  311.      }
  312.   }
  313.   if (key_open!=null){
  314.     key_open.setAttribute('key',prefs.getCharPref('keys.sidebar.key'));
  315.     key_open.setAttribute('modifiers', prefs.getCharPref('keys.sidebar.modifiers'));
  316.   }
  317.   if (GMarks_isFF3 && prefs.getBoolPref("ctrlD")){
  318.     var addbkmk = document.getElementById("Browser:AddBookmarkAs");
  319.     addbkmk.setAttribute("oncommand","GM.addGMark()");
  320.   }
  321.   var gmarks_tbox = getBrowser().mTabBox;
  322.   gmarks_tbox.addEventListener("load", GM.onPageChange, true);
  323.   gmarks_tbox.addEventListener("select", GM.onPageChange, true);
  324.   gmarks_tbox.addEventListener("pageshow", GM.onPageChange, true);
  325.   document.getElementById("cmd_CustomizeToolbars").addEventListener("DOMAttrModified", function(aEvent) {
  326.     if (aEvent.attrName == "disabled" && !aEvent.newValue) {
  327.       insertInToolbar();
  328.     }
  329.   }, false);
  330.   GM.observer.register();
  331.   insertInToolbar();
  332. }
  333. function initGMarksMenu(){
  334.   //dump("initGMarksMenu\n");
  335.   var prefs = Components.classes["@mozilla.org/preferences-service;1"].
  336.       getService(Components.interfaces.nsIPrefService).getBranch("gmarks");
  337.   var label = "";
  338.   var menu=document.getElementById("gmarksMenu");
  339.   if (!menu) return;
  340.   label = menu.getAttribute("name");
  341.   if (prefs.getBoolPref(".menu.hidden")){
  342.     menu.setAttribute("hidden","true");
  343.     return;
  344.   }
  345.   if (prefs.getBoolPref(".menu.hidebookmarks")){
  346.     var bmenuID=GMarks_isFF3?"bookmarksMenu":"bookmarks-menu";
  347.     var bmenu = document.getElementById(bmenuID);
  348.     bmenu.hidden=true;
  349.     bmenu.setAttribute("hidden","true");
  350.     if (prefs.getBoolPref(".menu.rename")){
  351.       label = bmenu.getAttribute("label");
  352.     }
  353.   }
  354.   menu.setAttribute("label",label);
  355.   menu.label = label;
  356.   var itemIDs=prefs.getCharPref(".menu.items").split(",");
  357.   if (itemIDs.length==0) return;
  358.   var popup=document.getElementById("gmarksMenuPopup");
  359.   /* clear old items */
  360.   while (popup.lastChild) popup.removeChild(popup.lastChild);
  361.   itemIDs.forEach(function(id,idx,arr){
  362.     try{
  363.     var ele=null;
  364.     switch(id){
  365.       case "addeditbookmark":
  366.         ele=document.createElement("menuitem");
  367.         ele.setAttribute("id","gmarks_menu_"+id);
  368.         ele.setAttribute("oncommand","GM.addGMark();");
  369.         break;
  370.       case "bookmarktabs":
  371.         ele=document.createElement("menuitem");
  372.         ele.setAttribute("id","gmarks_menu_"+id);
  373.         ele.setAttribute("oncommand","GM.addGMarks();");
  374.         break;
  375.       case "removebookmark":
  376.         ele=document.createElement("menuitem");
  377.         ele.setAttribute("id","gmarks_menu_"+id);
  378.         ele.setAttribute("oncommand","GM.removeGMark();");
  379.         break;
  380.       case "organize":
  381.         ele=document.createElement("menuitem");
  382.         ele.setAttribute("id","gmarks_menu_"+id);
  383.         ele.setAttribute("oncommand","GM.organizeGMarks();");
  384.         break;
  385.       case "gotosite":
  386.         ele=document.createElement("menuitem");
  387.         ele.setAttribute("id","gmarks_menu_"+id);
  388.         ele.setAttribute("oncommand","GM.manageOnline();");
  389.         break;
  390.       case "options":
  391.         ele=document.createElement("menuitem");
  392.         ele.setAttribute("id","gmarks_menu_"+id);
  393.         ele.setAttribute("oncommand","GM.openOptions();");
  394.         break;
  395.       case "editfilters":
  396.         ele=document.createElement("menuitem");
  397.         ele.setAttribute("id","gmarks_menu_"+id);
  398.         ele.setAttribute("oncommand","GM.editFilters();");
  399.         break;
  400.       case "refresh":
  401.         ele=document.createElement("menuitem");
  402.         ele.setAttribute("id","gmarks_menu_"+id);
  403.         ele.setAttribute("oncommand","GMS.getBookmarksFeed('onrefresh',true);");
  404.         break;
  405.       case "mostrecent":
  406.         if (GMS.recent.length>0){
  407.           ele=document.createElement("menu");
  408.           ele.setAttribute("id","gmarks_menu_"+id);
  409.           ele.className="bookmark-item menu-iconic";
  410.           ele.setAttribute("container","true");
  411.           ele.setAttribute("query","true");
  412.           ele.appendChild(createFolderItem(GMS.recent));
  413.         }
  414.         break;
  415.       case "mostused":
  416.         if (GMS.frequent.length>0){
  417.           ele=document.createElement("menu");
  418.           ele.setAttribute("id","gmarks_menu_"+id);
  419.           ele.className="bookmark-item menu-iconic";
  420.           ele.setAttribute("container","true");
  421.           ele.setAttribute("query","true");
  422.           ele.appendChild(createFolderItem(GMS.frequent));
  423.         }
  424.         break;
  425.       case "bookmarkstree":
  426.         //dump("bookmarkstree: "+GMS.isSignedIn+"\n");
  427.         if (GMS.isSignedIn){
  428.           var bkmks=getTreeData("",false,"menu");
  429.           for (var i=0;i<bkmks.length;i++){
  430.             var btn;
  431.             if (bkmks[i].type==0){//Its a folder!
  432.               btn=document.createElement('menu');
  433.               btn.setAttribute('value',bkmks[i].fullTitle)
  434.               btn.setAttribute('label',bkmks[i].title);
  435.               btn.className="bookmark-item menu-iconic";
  436.               btn.setAttribute("container","true");
  437.               btn.addEventListener('click',function(event){
  438.                 if (event.button==1){
  439.                   var url=event.target.getAttribute('value');
  440.                   openGMarkLabelInTabs(event);
  441.                 }
  442.               },false);
  443.               btn.appendChild(createFolderItem(bkmks[i].data));
  444.               btn.setAttribute('context',"gm-labelPopup");
  445.             }
  446.             else{
  447.               btn=createBookmarkItem('menuitem',bkmks[i]);
  448.             }
  449.             popup.appendChild(btn);
  450.           }
  451.         }
  452.         else{
  453.           id = "signin";
  454.           var ele = document.createElement("menuitem");
  455.           ele.setAttribute("id","gmarks_menu_signin");
  456.           ele.setAttribute("oncommand","GM.signIn();");
  457.         }
  458.         break;
  459.       case "separator":
  460.         ele=document.createElement("menuseparator");
  461.         ele.setAttribute("class","groove");
  462.         break;
  463.     }
  464.     if (ele){
  465.       if (id!="separator" && id!="bookmarkstree")
  466.         ele.setAttribute("label",GMS.strbundle.GetStringFromName(id));
  467.       popup.appendChild(ele);
  468.     }
  469.     }
  470.     catch(e){
  471.       dump("error in menu loop:\n"+e+"\n");
  472.     }
  473.   });
  474.   //dump("gmarks menu complete\n");
  475. }
  476. function insertInToolbar(data){
  477.   var prefs = Components.classes["@mozilla.org/preferences-service;1"].
  478.       getService(Components.interfaces.nsIPrefService).getBranch("gmarks");
  479.   try{
  480.     GMS.toolbarFolder=prefs.getComplexValue(".toolbarFolder",
  481.           Components.interfaces.nsISupportsString).data;
  482.   }
  483.   catch(e){
  484.     if (prefs.prefHasUserValue(".toolbarFolder"))
  485.       GMS.toolbarFolder=prefs.getCharPref(".toolbarFolder");
  486.   }
  487.   if (!GMS)
  488.     GMS=Components.classes["@mozilla.org/gmarks;1"]
  489.                      .getService(Components.interfaces.nsIGMarksService).wrappedJSObject;
  490.   gmarksToolbar=document.getElementById("gmarksToolbar");
  491.   if (gmarksToolbar){
  492.     gmarksToolbar.setAttribute('value',GMS.toolbarFolder);
  493.     for (var i=gmarksToolbar.childNodes.length-1;i>=0;i--){
  494.       gmarksToolbar.removeChild(gmarksToolbar.childNodes[i]);
  495.     }
  496.     var bkmks=getTreeData(GMS.toolbarFolder,true);
  497.     if (bkmks && bkmks.length>0){
  498.       if (GMS.toolbarFolder==""){
  499.         var btn=document.createElement('toolbarbutton');
  500.         btn.setAttribute('type','menu');
  501.         btn.setAttribute('label',"Bookmarks");
  502.         btn.setAttribute('show-text','always');
  503.         btn.className="gmarks-personalfolder-all";
  504.         btn.appendChild(createFolderItem(bkmks));
  505.         gmarksToolbar.appendChild(btn);
  506.       }
  507.       else{
  508.         for (var i=0;i<bkmks.length;i++){
  509.           var btn;
  510.           if (bkmks[i].type==0){//Its a folder!
  511.             btn=document.createElement('toolbarbutton');
  512.             btn.setAttribute('type','menu');
  513.             btn.setAttribute('value',bkmks[i].fullTitle)
  514.             if (!GMS.toolbarShowIconsOnly)
  515.               btn.setAttribute('label',bkmks[i].title);
  516.             if (!GMS.toolbarShowIconsOnly)
  517.               btn.setAttribute('show-text','always');
  518.             else{
  519.               btn.setAttribute('show-text','never');
  520.               btn.setAttribute('tooltiptext',bkmks[i].title);
  521.             }
  522.             if (GMS.showIcons)
  523.               btn.className="gmarks-personalfolder";
  524.             else
  525.               btn.className="gmarks-personalfolder-all";
  526.             btn.addEventListener('click',function(event){
  527.               if (event.button==1){
  528.                 var url=event.target.getAttribute('value');
  529.                 openGMarkLabelInTabs(event);
  530.               }
  531.             },false);
  532.             btn.appendChild(createFolderItem(bkmks[i].data));
  533.             btn.setAttribute('context',"gm-labelPopup");
  534.           }
  535.           else{
  536.             btn=createBookmarkItem('toolbarbutton',bkmks[i]);
  537.           }
  538.           gmarksToolbar.appendChild(btn);
  539.         }
  540.       }
  541.     }
  542.   }
  543. }
  544.  
  545. function createBookmarkItem(elementType,bkmk){
  546.   var btn=document.createElement(elementType);
  547.   btn.setAttribute('id',"gmBkmk_"+bkmk.id);
  548.   if (!(GMS.toolbarShowIconsOnly && elementType=="toolbarbutton"))
  549.     btn.setAttribute('label',bkmk.title);
  550.   btn.setAttribute('value',bkmk.url);
  551.   if (GMS.showIcons){
  552.     //if (elementType=="menuitem"){
  553.       btn.className="menuitem-iconic bookmark-item";//gmarks-personalbkmk
  554.     //}else
  555.     //  btn.className="gmarks-personalbkmk";//bookmark-item
  556.   }
  557.   else{
  558.     btn.className="gmarks-personalbkmk";
  559.   }
  560.   if (!GMS.toolbarShowIconsOnly && elementType=="toolbarbutton")
  561.     btn.setAttribute('show-text','always');
  562.   else{
  563.     btn.setAttribute('show-text','never');
  564.   }
  565.   if (GMS.toolbarShowIconsOnly && elementType=="toolbarbutton")
  566.     btn.setAttribute('tooltiptext',bkmk.title);
  567.   else
  568.     btn.removeAttribute('tooltiptext');
  569.   try{
  570.     if (GMS.showIcons && GMS.showFavs){
  571.       if (bkmk.image)
  572.         btn.setAttribute('image',bkmk.image);
  573.     }
  574.   }catch(e){}
  575.   btn.addEventListener('command',function(event){
  576.       var url=event.target.getAttribute('value');
  577.       openGMark(url,event);
  578.       if (event.target.parentNode.hidePopup)
  579.         event.target.parentNode.hidePopup();
  580.     },false);
  581.   btn.addEventListener('click',function(event){
  582.       if (event.button==1){
  583.         var url=event.target.getAttribute('value');
  584.         openGMark(url,event);
  585.         var last = null;
  586.         var cur = event.target.parentNode;
  587.         while(cur && (cur.tagName == "popup" || cur.tagName == "menupopup" || cur.tagName == "menu" || (cur.tagName=="button" && cur.type=="menu"))){
  588.           if (cur.tagName == "popup" || cur.tagName == "menupopup"){
  589.             last = cur;
  590.           }
  591.           cur = cur.parentNode;
  592.         }
  593.         if (last)
  594.           last.hidePopup();
  595.       }
  596.     },false);
  597.   btn.setAttribute('context',"gm-bookmarkPopup");
  598.   return btn;
  599. }
  600. function createFolderItem(bkmks){
  601.   var folder=document.createElement('menupopup');
  602.   for (var i=0;i<bkmks.length;i++){
  603.     var item;
  604.     if (bkmks[i].type==0){
  605.       item=document.createElement('menu');
  606.       item.setAttribute('label',bkmks[i].title);
  607.       item.setAttribute('value',bkmks[i].fullTitle)
  608.       item.setAttribute('show-text','always');
  609.       if (GMS.showIcons)
  610.         item.className="menu-iconic bookmark-item";//gmarks-personalfolder
  611.       else
  612.         item.className="gmarks-personalfolder-all";
  613.       item.setAttribute("container","true");
  614.       item.appendChild(createFolderItem(bkmks[i].data));
  615.       item.setAttribute('context',"gm-labelPopup");
  616.       item.addEventListener('click',function(event){
  617.         if (event.button==1){
  618.           var url=event.target.getAttribute('value');
  619.           openGMarkLabelInTabs(event);
  620.         }
  621.       },false);
  622.     }
  623.     else{
  624.       item=createBookmarkItem('menuitem',bkmks[i]);
  625.     }
  626.     folder.appendChild(item);
  627.   }
  628.   return folder;
  629. }
  630. function doGMarksUnload(){
  631.   GM.observer.unregister()
  632. }
  633.  
  634. function addGMarkArgs(title,url,labels,notes,tab){
  635.   this.name=title ? title : url;
  636.   this.url=url;
  637.   this.labels=labels;
  638.   this.selectedTab=tab;
  639.   this.description=notes;
  640. }
  641.  
  642. function openGMark(url,event){
  643.   var bookmarkPrefs=Components.classes["@mozilla.org/preferences-service;1"].
  644.                             getService(Components.interfaces.nsIPrefService).getBranch("extensions.tabmix.");
  645.   var bkmkNewTab;
  646.   try{
  647.     bkmkNewTab=bookmarkPrefs.getBoolPref("opentabfor.bookmarks");
  648.   }
  649.   catch(e){bkmkNewTab=false;}
  650.   var prefs = Components.classes["@mozilla.org/preferences-service;1"].
  651.                             getService(Components.interfaces.nsIPrefService).getBranch("gmarks");
  652.   bkmkNewTab=bkmkNewTab || prefs.getBoolPref('.openinnewtab');
  653.   //if (window.content.location.href=="about:blank" || window.content.location.href==""){
  654.   //  openUILinkIn(url,"current");
  655.   //}
  656.   //else
  657.   if (!bkmkNewTab)
  658.     openUILink(url,event,false,true);
  659.   else{
  660.     if (event.shiftKey==true)
  661.       openUILinkIn(url,"tabshifted");
  662.     else
  663.       openUILinkIn(url,"tab");
  664.   }
  665. }
  666. function openGMarkLabelInTabs(event){
  667.   var prefs = Components.classes["@mozilla.org/preferences-service;1"].
  668.       getService(Components.interfaces.nsIPrefService).getBranch("gmarks.");
  669.   var replace = prefs.getBoolPref("loadLabelAndReplace");
  670.   if (replace){
  671.     var childNodes = gBrowser.tabContainer.childNodes;
  672.     for (var i = childNodes.length - 1; i > 0; --i) {
  673.       gBrowser.removeTab(childNodes[i]);
  674.     }
  675.   }
  676.   var label=getGMarksLabel(event);
  677.   var labelArray = new Array();
  678.   labelArray = GMS.getBookmarksByLabel(label);
  679.   for (var i = 0; i < labelArray.length; i++)
  680.     openUILinkIn(labelArray[i].url, "tabshifted");
  681.   if (replace)
  682.     gBrowser.removeTab(gBrowser.tabContainer.childNodes[0]);
  683. }
  684. function getGMarksLabel(event){
  685.   var parent=document.popupNode;
  686.   if (parent!=null){
  687.     if (parent.tagName=="menu" || parent.getAttribute('type')=="menu"){
  688.       return parent.getAttribute('value');
  689.     }
  690.     else{
  691.       return event.target.getAttribute('value');
  692.     }
  693.   }
  694.   else
  695.     return event.target.getAttribute('value');
  696.   return parent.getAttribute('value');
  697. }
  698. window.addEventListener('keyup',GM.handleKeyUp,false);
  699. window.addEventListener('load',doGMarksLoad,false);
  700. window.addEventListener('unload',doGMarksUnload,false);
  701.